home *** CD-ROM | disk | FTP | other *** search
- /* $Filename: WormWars/Source/same.h
- * $VER: WormWars 6.3
- * $Description: Header file for Worm Wars
- *
- * © Copyright 2000 James R. Jacobs.
-
- SAME ON EACH PLATFORM -------------------------------------------------- */
-
- #define elif else if
- #define AGLOBAL ; /* global (project-scope) */
- #define MODULE static /* external static (file-scope) */
- #define PERSIST static /* internal static (function-scope) */
- #define AUTO auto /* automatic (function-scope) */
-
- /* miscellaneous */
-
- #define CAUSEWAIT 100
- #define DATELENGTH 8 /* DD/MM/YY */
- #define TIMELENGTH 5 /* HH:MM */
- #define DEFAULTLEVELS 5
- #define ENDXPIXEL ((STARTXPIXEL + SQUAREX * (FIELDX + 1)) - 1)
- #define ENDYPIXEL ((STARTYPIXEL + SQUAREY * (FIELDY + 1)) - 1)
- #define FIELDX 52 /* in squares */
- #define FIELDY 38 /* in squares */
- #define HISCORES 4
- #define LIFEMODULO 1000
- #define MAXLEVELS 40 /* assert (MAXLEVELS >= 1 && MAXLEVELS <= 99); */
- #define NAMELENGTH 21 /* 0..20 are TEXT, 21 is NULL */
- #define NOMODE 0
- #define NUMKEYS 28
- #define PATIENCE 20
- #define SAYLIMIT ((ENDXPIXEL - STARTXPIXEL) / FONTX)
- #define VERSION "$VER: Worm Wars 6.3 (8.8.100)"
-
- /* samples */
-
- #define FXBORN_DOG 0
- #define FXBORN_DRIP 1
- #define FXBORN_GOAT 2
- #define FXBORN_MISSILE 3
- #define FXBORN_ORB 4
- #define FXBORN_PENGUIN 5
- #define FXBORN_PROTECTOR 6
- #define FXDEATH_FRAGMENT 7 // thud
- #define FXDEATH_GOAT 8
- #define FXDEATH_ORB 9
- #define FXDEATH_PENGUIN 10
- #define FXDEATH_WORM 11
- #define FXDO_BOMB 12 // tick
- #define FXDO_ENCLOSE 13
- #define FXDO_GOAT 14 // fire
- #define FXDO_JUMP 15
- #define FXDO_ORB 16 // split
- #define FXGET_AMMO 17
- #define FXGET_CYCLONE 18
- #define FXGET_DRIP 19
- #define FXGET_GROWER 20
- #define FXGET_OBJECT 21
- #define FXGET_NITRO 22
- #define FXGET_POWERUP 23
- #define FXGET_PULSE 24 // explode
- #define FXGET_SKULL 25
- #define FXFILENEW 26
- #define FXFILEOPEN 27
- #define FXFILESAVE 28
- #define FXFILESAVEAS 29
- #define FXEDITCUT 30
- #define FXEDITCOPY 31
- #define FXEDITPASTE 32
- #define FXEDITDELETE 33
- #define FXHELP 34
- #define FXUSE_AMMO 35
- #define FXUSE_ARMOUR 36
- #define FXUSE_BOMB 37
- #define FXUSE_TELEPORT 38
- #define FXUSE_TONGUE 39
- #define FX_C 40
- #define FX_O 41
- #define FX_M 42
- #define FX_P 43
- #define FX_L 44
- #define FX_E 45
- #define FX_T 46
- #define FXPAIN 47
- #define FXAPPLAUSE 51 // after each new hiscore
- #define FXGAMEOVER 52 // if all worms are dead
- #define FXCELEBRATE 53 // if game succeeded
- #define FXCLICK 54 // rundown, keypresses
- #define FXLAUNCH 55 // title screen
- #define FXRIFF 56 // after each rundown
- #define FXSIREN 57 // out of time
- #define SAMPLES FXSIREN
- #define FXCENTRE FXDEATH_PENGUIN
- #define FXDO_CLOUD FXDO_GOAT
- #define FXFX FXLAUNCH
- #define FXRUNDOWN FXCLICK
- #define FXUSE_PROTECTOR FXBORN_PROTECTOR
-
- /* key types */
-
- #define MOVE 0 /* not AMMO, TRAINER, ONEHUMAN */
- #define TRAINER 2 /* not MOVE, AMMO, ONEHUMAN */
- #define ONEHUMAN 3 /* not MOVE, AMMO, TRAINER */
-
- /* speeds */
-
- #define VERYFAST 1
- #define FAST 2
- #define NORMAL 4
- #define SLOW 8
- #define VERYSLOW 16 /* must be non-0 */
-
- /* The constant NORMAL is used for several purposes:
- a) as a speed (therefore must not be VERYFAST, FAST, SLOW
- or VERYSLOW);
- b) as a blitmode (therefore must not be BLACK or WHITE); and
- c) as a pointer (therefore must not be GOLD, SILVER, EMPTY,
- WOOD or STONE).
-
- stats */
-
- #define AMMOLIMIT 100
- #define BIASLIMIT 100
- #define FREEDOMLIMIT 100
- #define STARTLIVES 100
- #define LIVESLIMIT 200
- #define MODELIMIT 100
- #define MULTILIMIT 8 /* don't set >8! */
- #define POWERLIMIT 6
- #define SCORELIMIT 99999999 // 99 million
-
- /* Field values...
- These are objects. */
- #define AFFIXER 0
- #define AMMO 1
- #define ARMOUR 2
- #define BIAS 3
- #define BOMB 4
- #define BONUS 5
- #define CLOCK 6
- #define CONVERTER 7
- #define CUTTER 8
- #define CYCLONE 9
- #define FREEDOM 10
- #define GROWER 11
- #define HEALER 12
- #define ICE 13
- #define LIFE 14
- #define LIGHTNING 15
- #define MAGNET 16
- #define MISSILE 17
- #define MULTIPLIER 18
- #define NITRO 19
- #define POWER 20
- #define PROTECTOR 21
- #define PULSE 22
- #define PUSHER 23
- #define REMNANTS 24
- #define SIDESHOT 25
- #define SLAYER 26
- #define SLOWER 27
- #define SWITCHER 28
- #define TONGUE 29
- #define TREASURE 30
- #define UMBRELLA 31
- #define LASTOBJECT UMBRELLA
- /* These are `empty'. */
- #define EMPTY (LASTOBJECT + 1)
- #define SILVER (LASTOBJECT + 2)
- #define GOLD (LASTOBJECT + 3)
- #define FIRSTEMPTY EMPTY
- #define LASTEMPTY GOLD
- #define LASTGOATFIRE LASTEMPTY
- /* Nothing special about the following... */
- #define TELEPORT (GOLD + 1)
- #define FRAGMENT (GOLD + 2)
- #define ORB (GOLD + 3)
- #define FIRSTPROTECTOR (GOLD + 4)
- #define LASTPROTECTOR (GOLD + 7)
- /* Margins indicate `ranges' for:
- n: orb bouncing, normal mode.
- t: orb bouncing, tongue mode.
- a: orb bouncing, armour mode.
- g: goats. */
- #define GREEN_C (GOLD + 8)
- #define RED_O (GOLD + 9)
- #define BLUE_M (GOLD + 10)
- #define YELLOW_P (GOLD + 11)
- #define GREEN_L (GOLD + 12)
- #define RED_E (GOLD + 13)
- #define BLUE_T (GOLD + 14)
- #define YELLOW_E (GOLD + 15)
- #define SKULL (GOLD + 16) /* n t a g */
- #define SLIME (GOLD + 17) /* [ [ */
- #define STONE (GOLD + 18) /* [ [ | | */
- #define GOAT (GOLD + 19) /* ] | | | */
- #define WOOD (GOLD + 20) /* | ] | */
- #define FIRSTTAIL (GOLD + 21) /* | | */
- #define LASTTAIL (GOLD + 24) /* ] ] */
- #define FIRSTLETTER GREEN_C
- #define FIRSTNONE STONE
- #define FIRSTTONGUE STONE
- #define FIRSTARMOUR SLIME
- #define FIRSTGOAT SLIME
- #define LASTLETTER YELLOW_E
- #define LASTNONE LASTTAIL
- #define LASTTONGUE GOAT
- #define LASTARMOUR GOAT
- #define LASTGOAT LASTTAIL
- #define LETTERS (LASTLETTER - FIRSTLETTER)
-
- #define ORBTONGUE (LASTTAIL + 1)
- #define ORBARMOUR (LASTTAIL + 2)
- #define FIRSTFIRE (LASTTAIL + 3)
- #define LASTFIRE (LASTTAIL + 6)
- #define FIRSTMISSILE (LASTTAIL + 7)
- #define LASTMISSILE (LASTTAIL + 10)
- #define START (LASTTAIL + 11)
- #define MUSIC (LASTTAIL + 12)
- #define FX (LASTTAIL + 13)
- #define ZERO (LASTTAIL + 14)
- #define TIMEBOMB ZERO
- #define ONE (ZERO + 1)
- #define TWO (ZERO + 2)
- #define HEAD (ZERO + 10)
- #define GREENHEADUP HEAD
- #define REDHEADUP (HEAD + 1)
- #define BLUEHEADUP (HEAD + 2)
- #define YELLOWHEADUP (HEAD + 3)
- #define FIRSTHEAD GREENHEADUP
- #define LASTHEAD YELLOWHEADUP
- #define GREENHEADDOWN (HEAD + 4)
- #define REDHEADDOWN (HEAD + 5)
- #define BLUEHEADDOWN (HEAD + 6)
- #define YELLOWHEADDOWN (HEAD + 7)
- #define GREENHEADLEFT (HEAD + 8)
- #define REDHEADLEFT (HEAD + 9)
- #define BLUEHEADLEFT (HEAD + 10)
- #define YELLOWHEADLEFT (HEAD + 11)
- #define GREENHEADRIGHT (HEAD + 12)
- #define REDHEADRIGHT (HEAD + 13)
- #define BLUEHEADRIGHT (HEAD + 14)
- #define YELLOWHEADRIGHT (HEAD + 15)
- #define GREENMODEUP (HEAD + 16)
- #define REDMODEUP (HEAD + 17)
- #define BLUEMODEUP (HEAD + 18)
- #define YELLOWMODEUP (HEAD + 19)
- #define GREENMODEDOWN (HEAD + 20)
- #define REDMODEDOWN (HEAD + 21)
- #define BLUEMODEDOWN (HEAD + 22)
- #define YELLOWMODEDOWN (HEAD + 23)
- #define GREENMODELEFT (HEAD + 24)
- #define REDMODELEFT (HEAD + 25)
- #define BLUEMODELEFT (HEAD + 26)
- #define YELLOWMODELEFT (HEAD + 27)
- #define GREENMODERIGHT (HEAD + 28)
- #define REDMODERIGHT (HEAD + 29)
- #define BLUEMODERIGHT (HEAD + 30)
- #define YELLOWMODERIGHT (HEAD + 31)
- #define METAL (HEAD + 32)
- #define FIRSTDRIP (HEAD + 33)
- #define DRIP FIRSTDRIP
- #define LASTDRIP (HEAD + 36)
- #define BLACKENED (HEAD + 37)
- #define WHITENED (HEAD + 38)
- #define PENGUIN (HEAD + 39)
- #define WHIRLWIND (HEAD + 40)
- #define DOG (HEAD + 41) /* dog chasing */
- #define DOGAWAKENING (HEAD + 42)
- #define DOGDORMANT (HEAD + 43)
- #define CLOUD (HEAD + 44)
- #define ARRAYSIZE CLOUD
-
- #define ANYTHING STONE // should be something that is valid field contents
-
- /* These have no imagery. */
- #define TEMPTAIL (ARRAYSIZE + 1)
- #define TEMPWOOD TEMPTAIL
- #define TEMPSLIME TEMPTAIL
- #define TEMPLIGHTNING TEMPTAIL
- #define TEMPSILVER (ARRAYSIZE + 2)
- #define TEMPGOLD (ARRAYSIZE + 3)
- #define NOSQUARE (ARRAYSIZE + 4)
-
- /* game status
- */
-
- #define GAMEOVER 0
- #define PLAYGAME 1
- #define FIELDEDIT 2
- #define TITLESCREEN 3
-
- /* indicator locations */
-
- #define CAUSEYDISTANCE 2 /* distance from centre for cause */
- #define LETTERYDISTANCE 3 /* distance from centre for letters */
- #define ICONY (FIELDY / 2)
- #define MUSICICON (FIELDX + 2)
- #define CLOCKICON (FIELDX + 3)
-
- /* control values */
-
- #define NONE 0 /* must be 0
- */
- #define AMIGA 1
- #define HUMAN 2
- #define IBMPC AMIGA
-
- /* PROTOTYPES -------------------------------------------------------------
-
- You could put AGLOBAL in front of these if you wanted to.
-
- engine.c */
-
- void clearhiscores(void);
- void enginesetup(void);
- void gameloop(void);
- void levelappend(void);
- void leveldelete(void);
- void levelerase(void);
- void levelinsert(void);
- void matchteleports(void);
- void newfields(void);
- void newgame(void);
- void timeloop(void);
-
- void align(STRPTR string, SBYTE size, TEXT filler);
- AGLOBAL void drawhead(SBYTE player, SBYTE x, SBYTE y);
- AGLOBAL void drawsquare(SBYTE x, SBYTE y);
- void fillfield(SBYTE which);
- void icon(SBYTE player, UBYTE image);
- void saylevel(COLOUR colour);
- void setbrush(SBYTE newbrush);
- void train(SCANCODE scancode);
- void updatesquare(SBYTE x, SBYTE y);
- void wormqueue(SBYTE player, SBYTE deltax, SBYTE deltay);
- void wormscore(SBYTE player, LONG score);
-
- SBYTE loadfields(STRPTR pathname);
- SBYTE partner(SBYTE which);
- ABOOL savefields(STRPTR pathname);
- SBYTE valid(SBYTE x, SBYTE y);
- SBYTE xwrap(SBYTE x);
- SBYTE ywrap(SBYTE y);
-
- /* system.c */
-
- void celebrate(void);
- void clearjoystick(void);
- void clearkybd(void);
- void clearscreen(void);
- void datestamp(void);
- void gameinput(void);
- void hiscores(void);
- void joy0(void);
- void resettime(void);
- void sendreadrequest(void);
- void systemsetup(void);
- void timing(void);
- void titlescreen(void);
- void turborender(void);
- void waitasec(void);
-
- void cleanexit(SLONG rc);
- void draw(SBYTE x, SBYTE y, UBYTE image);
- void effect(SBYTE index);
- void fileopen(ABOOL revert);
- void filesaveas(ABOOL flag);
- void flash(ULONG where);
- void rundown(SBYTE player);
- void say(STRPTR sentence, COLOUR colour);
- void stat(SBYTE player, SBYTE line);
- void stopfx(void);
-
- ABOOL anykey(ABOOL timeout);
- ABOOL verify(void);
- ABOOL ZOpen(STRPTR fieldname, ABOOL write);
- ABOOL ZRead(STRPTR IOBuffer, ULONG length);
- ABOOL ZWrite(STRPTR IOBuffer, ULONG length);
- ABOOL ZClose(void);
-
- /* PUBLIC STRUCTURES ------------------------------------------------------ */
-
- struct HiScoreStruct
- { SBYTE player, level;
- SLONG score; /* the score itself */
- TEXT name[NAMELENGTH + 2]; /* name of the player */
- ABOOL fresh; /* is the entry new? */
- TEXT date[DATELENGTH + 1], /* date of achievement */
- time[TIMELENGTH + 1]; /* time of achievement */
- };
- struct TeleportStruct
- { SBYTE x, y;
- ABOOL alive;
- };
- struct WormStruct
- { SBYTE x, y, deltax, deltay, position, posidir, victor, cause,
- statx, staty, pos, multi, power, mode, last, levelreached;
- ABOOL affixer, remnants, alive, moved, nitro, pusher,
- sideshot, flashed, rammed;
- UBYTE speed, control;
- SWORD armour, tongue, ammo, bias, cutter, ice, lives, freedom;
- SLONG score, oldscore, hiscore;
- ULONG causewait;
- TEXT name[NAMELENGTH + 1];
- COLOUR colour;
- };
-
- /* Must have blank line at EOF. */
-